/* eslint-disable prettier/prettier */
// 二次封装axios
// import useUserStore from '@/store/modules/user'
import axios from 'axios'
import { ElMessage } from 'element-plus'
// import { getToken } from '@/utils/auth/token.ts'
import {TokenKit} from '@/utils/auth/token'

// 1.1 axios createqs
const request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000,
})

// 1.2 reqest add request&response
//  use-request-interceptors
request.interceptors.request.use(
    // config配置对象,返回配置对象
    (config) => {
      // const userStore = useUserStore()

      // if (userStore.token) {
      //   config.headers.token = userStore.token
      // }
      if (TokenKit.GET_TOKEN()) {
        config.headers.token = 'Bear ' + TokenKit.GET_TOKEN();
      }

      return config
    },
    (error) => {return Promise.reject(error)},
)

request.interceptors.response.use(

  (res) => {
    
     if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
       return Promise.resolve(res.data);
    }
    
      // 2.11 成功回调
     if (res.status === 200) {
       // acquire code
        const code = res.data.code || 200;  
        //  acquire msg
        return Promise.resolve(res.data.data)
      } else {
        return Promise.reject(res.data)
      }
    },
    (error) => {
      // 2.12 失败回调
      let message = ''
      const status = error.response.status
      switch (status) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          message = '未登录'
          break;
        // 403 token过期
        // 登录过期对用户进行提示
        // 清除本地token和清空vuex中token对象
        // 跳转登录页面
        case 403:
          message = '登录过期，请重新登录'
          break;
        case 404:
          message = '网络请求不存在'
          break;
        case 500:
          message = '服务器出现问题'
          break;
        default:
          message = error.response.data.message
          break;
      }
      ElMessage({
        type: 'error',
        message,
      })
      return Promise.reject(error)
    },
)

// 1.3 export request
export default request
